package com.huoyun.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import com.huoyun.util.bean.MailSenderInfo;
import com.huoyun.util.bean.MyAuthenticator;

public class SendUtil 
{
	/**
	 * 发送短信（中国短信网http.c123.com）
	 * @param toPhone
	 * @param content
	 * @return
	 * @throws IOException 
	 */
	public static String sendSMS(String toPhone, String content) throws IOException
	{
		
		// 创建StringBuffer对象用来操作字符串
		StringBuffer sb = new StringBuffer("http://http.c123.com/tx/?");

		// 向StringBuffer追加用户名
		sb.append("uid=101673");

		// 向StringBuffer追加密码（密码采用MD5 32位 小写）
		sb.append("&pwd=23d21dfee9d6f6fd1e3495bfc2869646");

		// 向StringBuffer追加手机号码
		sb.append("&mobile=" + toPhone);

		// 向StringBuffer追加消息内容转URL标准码
		sb.append("&content="+URLEncoder.encode(content));

		// 创建url对象
		URL url = new URL(sb.toString());

		// 打开url连接
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();

		// 设置url请求方式 ‘get’ 或者 ‘post’
		connection.setRequestMethod("POST");

		// 发送
		BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

		// 返回发送结果,100表示成功
		return in.readLine();

	}
	
	public static boolean sendAuthEmail(String toEmail, String username)
	{
		//发邮件
		MailSenderInfo mailInfo = new MailSenderInfo();
	    mailInfo.setMailServerHost("smtp.126.com"); 
	    mailInfo.setMailServerPort("25"); 
	    mailInfo.setValidate(true); 
	    mailInfo.setUserName("huoyunwang123@126.com"); 
	    mailInfo.setPassword("huoyun123");//您的邮箱密码 
	    mailInfo.setFromAddress("huoyunwang123@126.com");
	    mailInfo.setToAddress(toEmail);
	    mailInfo.setSubject("货运网邮箱地址确认"); 
	    mailInfo.setContent(
	    		"<div>"
	    		+ "<b style='font-size:14px'>尊敬的用户：</b>" + toEmail
	    		+ "<p style='font-size:14px;'>您正在进行货源网邮箱认证，点击下面的确认链接便可完成货运网邮箱认证：</p>"
	            + "<p style='font-size:25px;font-weight:bold'>"
                + "<a target='_blank' href='"
                + "http://www.huoyun.com"
                + "'>点击这里，立即完成邮箱认证</a>"
                + "</p>"
                + "<p style='font-size:14px;'>如果您的邮件阅读程序不支持点击，请将上面的地址拷贝至您的浏览器（例如IE）的地址栏后打开。</p>"
                + "<p style='font-size:14px;'>"
                + "<a target='_blank' href='"
                + "http://www.huoyun.com"
                + "'>"
                + "http://www.huoyun.com"
                + "</a>"
                + "</p>"
	            + "</div>"
	    		); 
	    
	    //发送html格式　
	    return sendHtmlMail(mailInfo);
	}
	
	public boolean sendTextMail(MailSenderInfo mailInfo) {
		// 判断是否需要身份认证
		MyAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
		if (mailInfo.isValidate()) {
			// 如果需要身份认证，则创建一个密码验证器
			authenticator = new MyAuthenticator(mailInfo.getUserName(),
					mailInfo.getPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session sendMailSession = Session
				.getDefaultInstance(pro, authenticator);
		try {
			// 根据session创建一个邮件消息
			Message mailMessage = new MimeMessage(sendMailSession);
			// 创建邮件发送者地址
			Address from = new InternetAddress(mailInfo.getFromAddress());
			// 设置邮件消息的发送者
			mailMessage.setFrom(from);
			// 创建邮件的接收者地址，并设置到邮件消息中
			Address to = new InternetAddress(mailInfo.getToAddress());
			mailMessage.setRecipient(Message.RecipientType.TO, to);
			// 设置邮件消息的主题
			mailMessage.setSubject(mailInfo.getSubject());
			// 设置邮件消息发送的时间
			mailMessage.setSentDate(new Date());
			// 设置邮件消息的主要内容
			String mailContent = mailInfo.getContent();
			mailMessage.setText(mailContent);
			// 发送邮件
			Transport.send(mailMessage);
			return true;
		} catch (MessagingException ex) {
			ex.printStackTrace();
		}
		return false;
	}

	public static boolean sendHtmlMail(MailSenderInfo mailInfo) {
		// 判断是否需要身份认证
		MyAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
		// 如果需要身份认证，则创建一个密码验证器
		if (mailInfo.isValidate()) {
			authenticator = new MyAuthenticator(mailInfo.getUserName(),
					mailInfo.getPassword());
		}
		// 根据邮件会话属性和密码验证器构造一个发送邮件的session
		Session sendMailSession = Session
				.getDefaultInstance(pro, authenticator);
		try {
			// 根据session创建一个邮件消息
			Message mailMessage = new MimeMessage(sendMailSession);
			// 创建邮件发送者地址
			Address from = new InternetAddress(mailInfo.getFromAddress());
			// 设置邮件消息的发送者
			mailMessage.setFrom(from);
			// 创建邮件的接收者地址，并设置到邮件消息中
			Address to = new InternetAddress(mailInfo.getToAddress());
			// Message.RecipientType.TO属性表示接收者的类型为TO
			mailMessage.setRecipient(Message.RecipientType.TO, to);
			// 设置邮件消息的主题
			mailMessage.setSubject(mailInfo.getSubject());
			// 设置邮件消息发送的时间
			mailMessage.setSentDate(new Date());
			// MiniMultipart类是一个容器类，包含MimeBodyPart类型的对象
			Multipart mainPart = new MimeMultipart();
			// 创建一个包含HTML内容的MimeBodyPart
			BodyPart html = new MimeBodyPart();
			// 设置HTML内容
			html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
			mainPart.addBodyPart(html);
			// 将MiniMultipart对象设置为邮件内容
			mailMessage.setContent(mainPart);
			// 发送邮件
			Transport.send(mailMessage);
			return true;
		} catch (MessagingException ex) {
			ex.printStackTrace();
		}
		return false;
	}
}
